//
//  DDContactRequestMessage.m
//  DingDongZP
//
//  Created by Ray on 16/4/26.
//  Copyright © 2016年 iyhjiang.com. All rights reserved.
//

#import "DDContactRequestMessage.h"

@implementation DDContactRequestMessage


- (instancetype)initWithRequestType:(DDContactRequestType)requestType
                      requestAction:(DDContactRequestActionType)action {
    if (self = [super init]) {
        self.requestType = requestType;
        self.requestAction = action;
    }
    return self;
}

/*!
 将消息内容序列化，编码成为可传输的json数据
 
 @discussion 消息内容通过此方法，将消息中的所有数据，编码成为json数据，返回的json数据将用于网络传输。
 */
- (NSData *)encode
{
    NSMutableDictionary *data = [NSMutableDictionary new];
    data[@"type"] = @(self.requestType);
    data[@"action"] = @(self.requestAction);
    if (self.requestContent) {
        data[@"requestContent"] = self.requestContent;
    }
    if (self.replyContent) {
        data[@"replyContent"] = self.replyContent;
    }
    if (self.msgid) {
        data[@"msgid"] = self.msgid;
    }
    if (self.changeTime) {
        data[@"changeTime"] = self.changeTime;
    }
    return [NSJSONSerialization dataWithJSONObject:data options:0 error:nil];
}

/*!
 将json数据的内容反序列化，解码生成可用的消息内容
 
 @param data    消息中的原始json数据
 
 @discussion 网络传输的json数据，会通过此方法解码，获取消息内容中的所有数据，生成有效的消息内容。
 */
- (void)decodeWithData:(NSData *)data
{
    NSError *err;
    NSDictionary *jsonData = [NSJSONSerialization JSONObjectWithData:data options:0 error:&err];
    if (err) {
//        NSLog(@"err: %@", err);
        return;
    }
    self.requestType = [jsonData[@"type"] integerValue];
    self.requestAction = [jsonData[@"action"] integerValue];
    self.requestContent = jsonData[@"requestContent"];
    self.replyContent = jsonData[@"replyContent"];
    self.msgid = jsonData[@"msgid"];
    self.changeTime = jsonData[@"changeTime"];
}

/*!
 返回消息的类型名
 
 @return 消息的类型名
 
 @discussion 您定义的消息类型名，需要在各个平台上保持一致，以保证消息互通。
 
 @warning 请勿使用@"RC:"开头的类型名，以免和SDK默认的消息名称冲突
 */
+ (NSString *)getObjectName {
    return NSStringFromClass(self);
}

/*!
 返回消息的存储策略
 
 @return 消息的存储策略
 
 @discussion 指明此消息类型在本地是否存储、是否计入未读消息数。
 */
+ (RCMessagePersistent)persistentFlag
{
    return MessagePersistent_ISCOUNTED;
}

- (NSString *)conversationDigest
{
    return @"";
}

@end
